mybatis 的SQL日志级别调整方法 |
您所在的位置:网站首页 › mybatis log4j输出SQL yml › mybatis 的SQL日志级别调整方法 |
问题描述
在 Spring Cloud 项目中,生产环境需要打印mybatis的sql语句日志,但是mybatis打印的sql的默认日志级别是[debug],如果生产环境想看到sql语句,就必须开启[debug]级别的日志打印,这样做debug日志量过大,显然不可行。 如下绿色方案是我抄来的,但在我工程里没生效,最后我自己尝试在此基础上新研究的蓝色方法 解决思路 Spring Boot 中通过logback打印 mybatis的sql语句日志,并自定义日志输出实现将sql语句[debug]日志级别上升到[info]日志级别 解决方案 1. 常用的mybatis 日志输出是由org.apache.ibatis.logging.stdout.StdOutImpl控制的根据StdOutImpl.java可看出日志都是System.out.println(s);的控制台输出,配置及源码如下: application.xml配置: mybatis: type-aliases-package: com.jiafupeng.mapper mapper-locations: classpath:mapper/**/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台输出日志 StdOutImpl .java源码如下: public class StdOutImpl implements Log { public StdOutImpl(String clazz) { // Do Nothing } @Override public boolean isDebugEnabled() { return true; } @Override public boolean isTraceEnabled() { return true; } @Override public void error(String s, Throwable e) { System.err.println(s); e.printStackTrace(System.err); } @Override public void error(String s) { System.err.println(s); } @Override public void debug(String s) { System.out.println(s); } @Override public void trace(String s) { System.out.println(s); } @Override public void warn(String s) { System.out.println(s); } } 2. 要想改变mybatis sql语句输出内容级别,则只需自定义Log实现类,重写mybatis sql打印方式及级别。代码如下 application.xml mybatis: type-aliases-package: com.jiafupeng.mapper mapper-locations: classpath:mapper/**/*.xml configuration: log-impl: com.***.***.MySlf4jImpl # mybatis自定义日志输出实现类 并将[debug]日志输出成[info]日志 MySlf4jImpl.java @Slf4j public class MySlf4jImpl implements Log { public MySlf4jImpl(String clazz) { // Do Nothing } @Override public boolean isDebugEnabled() { // return log.isDebugEnabled(); // 将debug级别输出权限改成info级别 return log.isInfoEnabled(); } ... @Override public void debug(String s) { // log.debug(s); // debug日志输出成info级别日志 log.info(s); } ... } 3. 指定logback的日志级别为info,也可在[info]级别日志中查看mybatis 的 sql语句。 logback.xml 蓝色方案: 对如上方案稍加修改: 概述:由于我工程里用的是多数据源,在整合mybatis时,每个数据源的注册类都自行扫描mapper接口和**Mapper.xml文件,所以我将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态,然后在resource的对应mapper目录中加入mybatis-config.xml,并且在注册数据源中将此文件注册进去,并且在mybatis-config.xml中加入相应配置后,mybatis的SQL日志就以INFO的方式打印出来了。 方案详述如下: 1. 将application.yml中增加的关于mybatis的相关配置恢复到修改前的状态注意,如果您的工程是单数据源,直接留用application.yml中增加的关于mybatis的相关配置即可。 2. 在resource/mapper/下适当的位置增加mybatis当前数据源的全局配置文件mybatis-config.xml如果您工程里已有此文件,请忽略此操作。 3. 在数据源注册类中增加mybatis-config.xml对应描述代码如果您工程里已有此文件,请忽略此操作。 @Data @Configuration @MapperScan(basePackages = MyDruidDatasrouceConfig.PACKAGE, sqlSessionFactoryRef = "mySqlSessionFactory") @Slf4j public class MyDruidDatasrouceConfig { ...... static final String CONFIG_LOCATION = "classpath:mapper/mybatis-config.xml"; ...... @Primary @Bean(name = "myDruidDatasrouceConfig ") public SqlSessionFactory mySqlSessionFactory(@Qualifier("myDruidDataSource") DataSource myDataSource) throws Exception { ...... sessionFactory.setConfigLocation(new PathMatchingResourcePatternResolver().getResource(CONFIG_LOCATION)); return sessionFactory.getObject(); } 4. 在mybatis-config.xml中增加如下配置:直接将日志实现类加到mybatis-config.xml配置里即可。 ...... ...... 至此,齐活儿! |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |